#!/usr/bin/env Python
# -*- coding:utf-8 -*-
# task_51_memo.py
# A memo demo 51备忘录，使用函数进行优化
# author: luoxiang

from color_me import ColorMe  # 导入4种颜色的自建模块
import time  # 导入时间模块
import sys  # 导入系统模块


all_memo = []  # 新建备忘录列表，存储备忘信息
all_time = 0
__user__ = input('请输入用户名：')


def cycle_memo():
    '''循环备忘录'''
    try:
        is_add = True
        while(is_add):  # 判断真假开始循环
            input_memo()
            is_add = input().strip() == 'y'

    except Exception as e:
        print('memo程序错误！', e)


def welcome():
    '''用户名输入和欢迎词'''
    try:
        welcome = '欢迎使用51备忘录'
        print(welcome.center(30, '-'))
        time.sleep(1)

    except Exception as e:
        print('memo程序错误！', e)


def input_memo():
    '''输入备忘信息'''
    try:
        # 添加两个备忘录输入格式事例
        print('示例1：2019年07月08日8点30分去单位上班，用时3h30min')
        time.sleep(1)
        print('示例2：07月08日上午需要带笔记本电脑去上班')
        time.sleep(1)
        in_sentence = input('请按照示例格式输入：')
        split_memo(in_sentence)

    except Exception as e:
        print('memo程序错误！', e)


def split_memo(in_sentence):
    '''判断拆分备忘录信息'''
    try:
        # 用时间字典定义8个时间段
        time_dict = {'早晨': '6点到8点', '上午': '9点到11点',
                     '中午': '12点到14点', '下午': '15点到17点',
                     '傍晚': '18点到20点', '晚上': '21点到23点',
                     '深夜': '0点到2点', '凌晨': '3点到5点'}

        # 根据输入格式，判断拆分信息（日期，时点，事件，时长）形式
        if in_sentence[in_sentence.find('日') + 1:
                       in_sentence.find('日') + 3]in time_dict.keys():
            in_date = in_sentence[:in_sentence.find('日') + 1]
            in_time = time_dict[in_sentence[in_sentence.find('日') + 1:
                                in_sentence.find('日') + 3]]
            in_thing = in_sentence[in_sentence.find('日') + 3:]
            in_duration = '3h'  # 每个时间副词，默认用时3小时
            hours = 3  # 每个时间副词，默认用时3小时
            minutes = 0

        else:
            in_date = in_sentence[:in_sentence.find('日') + 1]
            in_time = in_sentence[
                in_sentence.find('日') + 1: in_sentence.find('分') + 1]
            in_thing = in_sentence[
                in_sentence.find('分') + 1: in_sentence.find('，')]
            in_duration = in_sentence[in_sentence.find('时') + 1:]
            hours = in_sentence[in_sentence.find('时') + 1:
                                in_sentence.find('h')]
            minutes = in_sentence[in_sentence.find('h') + 1:
                                  in_sentence.find('m')]

        add_memo(in_date, in_time, in_thing, in_duration)
        print_memo(hours, minutes)

    except Exception as e:
        print('memo程序错误！', e)


def add_memo(in_date, in_time, in_thing, in_duration):
    '''添加备忘信息'''
    try:
        # 新建事件信息字典，并将四种信息键和值依次存入字典
        things_dict = {}
        things_dict['date'] = in_date
        things_dict['time'] = in_time
        things_dict['thing'] = in_thing
        things_dict['duration'] = in_duration
        all_memo.append(things_dict)  # 将每条新建的字典信息，追加到备忘录列表
        colour_memo(all_memo)
    except Exception as e:
        print('memo程序错误！', e)


def colour_memo(all_memo):
    '''给不同拆分信息上色'''
    try:
        global __user__
        num = 0  # 新建序号
        print((__user__ + '的备忘信息列表').center(30, '-'))
        time.sleep(1)
        for m in all_memo:  # 将列表信息逐条输出
            num += 1  # 追加序号

            # 给四种信息添加不同颜色，并输出
            # vscode上本人没安装运行颜色的扩展，输出不了颜色
            date_color = ColorMe('日期:' + m['date']).red()
            time_color = ColorMe('时点:' + m['time']).green()
            thing_color = ColorMe('事件:' + m['thing']).blue()
            duration_color = ColorMe('时长:' + m['duration']).yellow()
            print(f'{num}.{date_color}, {time_color}, ',
                  f'{thing_color}, {duration_color}')
            time.sleep(1)

    except Exception as e:
        print('memo程序错误！', e)


def print_memo(hours, minutes):
    '''统计备忘信息条数和时长'''
    try:
        global all_time
        all_time += int(hours) * 60 + int(minutes)  # 通过运算，追加总时长
        print(f'共{len(all_memo)}条备忘信息,',
              f'总时长：{all_time // 60}小时{all_time % 60}分。', end='')
        time.sleep(1)
        print('（y：继续添加，n: 退出）')  # 判断是否继续循环

    except Exception as e:
        print('memo程序错误！', e)


def delete_memo():
    '删除备忘信息'
    print('待开发。。。')


def modify_memo():
    '更改备忘信息'
    print('待开发。。。')


def help():
    '''提示用法'''
    print('''urage:
    -a, --add 添加记录
    -d, --delete 删除记录''')


def main():
    '''
    main: 程序主入口，当前文件单独运行时候从这里运行
    函数优化：每个函数尽量只干一件事！（前提是每个函数都能正常运行）
    用sys模块添加系统参数
    '''
    welcome()
    cycle_memo()

if __name__ == '__main__':
    main()
